package com.leixin.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Description: TODO
 * @Date : 2020/4/20
 * @Company : TODO
 * @Author : LeiXin
 */
public abstract class BaseService<M extends BaseMapper<T>, T extends Model> extends ServiceImpl<M, T> implements IService<T> {

    /**
     * <b>分页查询</b>
     *
     * @param page 分页参数（current（页码）/ size（页数））
     * @param w    where 条件（可以为 null），例如：where id='xxx'
     */
    public <E extends IPage<T>> E page(E page, T w) {
        return baseMapper.selectPage(page, Wrappers.lambdaQuery(w));
    }

    @Transactional(rollbackFor = Exception.class)
    public T saveToObj(T t) {
        baseMapper.insert(t);
        return t;
    }

    /**
     * <b>根据条件更新实体</b>
     *
     * @param t 实体对象 set 内容，例如：set name='xxx' (set 条件值,可以为 null)
     * @param w where 条件（可以为 null），例如：where id='xxx'
     */
    @Transactional(rollbackFor = Exception.class)
    public int update(T t, T w) {
        Wrapper<T> wrapper = null;
        if (w != null) {
            wrapper = new UpdateWrapper<>(w);
        }
        return baseMapper.update(t, wrapper);
    }

}
